import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lenovo
 * Date: 2022-04-26
 * Time: 9:06
 */
public class TestDemo {



    //编写程序数一下 1到 100 的所有整数中出现多少个数字9
    // 9 19 29 39 49 59 69 79 89 99
    // 90 91 92 93 94 95 96 97 98 99
    public static void main(String[] args) {
        int count = 0;
        for (int i = 1; i < 100; i++) {
            if(i % 10 == 9){
                count++;
            }
            else if(i / 10 == 9){
                count++;
            }
        }
        System.out.println(count);

    }
    //9. 获取一个数二进制序列中所有的偶数位和奇数位，分别输出二进制序列。
    //0000 1100
    public static void main11(String[] args) {
        int n = 12;
        //奇数位
        for (int i = 31; i >= 1; i-=2) {
            System.out.print(((n >> i) & 1));
        }
        System.out.println();
        //偶数位
        for (int i = 30; i >= 0 ; i-=2) {
            System.out.print(((n >> i) & 1));
        }
    }

    //更高校的算法
    //      n    &     n-1
    //0000 0111 & 0000 0110 == 0000 0110
    //0000 0110 & 0000 0101 == 00000100
    //0000 0100 & 0000 0011 == 0000 0000
    //写一个函数返回参数二进制中 1 的个数
    public static void main10(String[] args) {
        int n = 7;
        int count = 0;
        while (n != 0){
            n = n & (n-1);
            count++;
        }
        System.out.println(count);
    }

    //优化:0000 0111 实际上右移三次就不用了在移了 也就是说 右移三次后值已经变为0了 如果使用>> 则负数的符号位会一直补1 就会死循环，因此使用 >>>
    // 写一个函数返回参数二进制中 1 的个数
    //比如： 15 0000 1111 4 个 1
    public static void main9(String[] args) {
        int n = -1;
        int count = 0;
        while(n != 0){
            if((n & 1) == 1){
                count++;
                n >>>= 1;//>>> 无符号右移 符号位补0
            }
        }
        System.out.println(count);
    }


// 写一个函数返回参数二进制中 1 的个数
//比如： 15 0000 1111 4 个 1
public static void main8(String[] args) {
    int n = -1;
    int count = 0;
    for (int i = 0; i < 32; i++) {
        if(((n>>i) & 1) == 1){
            count++;
        }
    }
    System.out.println(count);
}
    //自幂数
    //1.这个数字有几位数
    //2.得到每一位数，并且求幂
    public static void main7(String[] args) {
        for (int i = 1; i < 999999 ; i++) {//123
            int count = 0;
            int tmp = i;
            while(tmp != 0){
                count++;
                tmp/=10;
            }
            tmp = i;
            int sum = 0;
            while(tmp != 0){
                //sum+= Math.pow(tmp%10,count);//增量运算符可以帮我们实现隐性提升
                sum = sum + (int)Math.pow(tmp%10,count);
                tmp/=10;
            }
            if(sum == i){
                System.out.println(i);
            }
        }
    }
    //打印1-100的数字
    public static void isPrime(int n) {
            int i = 2;
            for (; i <= Math.sqrt(n) ; i++) {
                if(n%i==0){
                    break;
                }
            }
            //1.break 不是素数
            // 2.i==n 是素数
            if (i > Math.sqrt(n)) {
                System.out.println("是素数"+n);
            }
    }
    public static void main6(String[] args) {
        for (int i = 1; i < 101 ; i++) {
            isPrime(i);
        }
    }



    //判断素数 优化2
    //n = a*b; a or b <= n^1/2
    public static void main5(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n;
        while(sc.hasNext()){
            n = sc.nextInt();
            int i = 2;
            for (; i <= Math.sqrt(n) ; i++) {
                if(n%i==0){
                    break;
                }
            }
            //1.break 不是素数
            // 2.i==n 是素数
            if (i > Math.sqrt(n)) {
                System.out.println("是素数"+n);
            }
            else{
                System.out.println("不是素数");
            }
        }
    }


    //判断素数 优化1
    //范围折半 [2.n/2] 11 :2 3 4 5
    public static void main4(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n;
        while(sc.hasNext()){
            n = sc.nextInt();
            int i = 2;
            for (; i <= n/2 ; i++) {
                if(n%i==0){
                    break;
                }
            }
            //1.break 不是素数
            // 2.i==n 是素数
            if (i > n/2) {
                System.out.println(n);
            }
        }
    }

//判定一个数字是否是素数
    public static void main3(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n;
        while(sc.hasNext()){
            n = sc.nextInt();
            int i = 2;
            for (; i < n ; i++) {
                if(n%i==0){
                    break;
                }
            }
            //1.break 不是素数
            // 2.i==n 是素数
            if (i == n) {
                System.out.println(n);
            }
        }
    }



//1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
    public static void main2(String[] args) {
        Scanner sc = new Scanner(System.in);
       while(sc.hasNext()){
           int input = sc.nextInt();
           if(input <= 18){
               System.out.println("少年");

           }
           else if(input > 18 && input <= 28){
               System.out.println("青年");

           }
           else if(input > 28 && input <= 55){
               System.out.println("中年");

           }
           else if(input > 55){
               System.out.println("老年");

           }

       }
    }

    public static void main1(String[] args) {
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(4);
    }
}
